草庐IT

c++ - gcc 和 libstdc++ 向前兼容

全部标签

c++ - 如何检查 configure.ac 中的特定 gcc 功能

比如gcc4.7有一个新特性——Wnarrowing。在configure.ac中,如何测试当前gcc是否支持某个功能?有一个file在gnulibc中,但对我来说意义不大。 最佳答案 gcc和clang都支持-W[no-]narrowing和-W[no-]error=narrowing选项。使用-std=c++11,gcc默认发出一个警告,而clang默认发出一个错误。即使你只提到gcc,我认为你可以将功能检查扩展到像clang这样试图提供相同选项和扩展的编译器。这可能也包括英特尔的icc。假设您选择了带有AC_PROG_CXX的

HarmonyOS 鸿蒙开发测试:兼容性测试

目录1范围1.1背景及目的1.1适用范围/测试范围2术语、定义和缩略语2.1术语、定义2.2缩略语3测试环境准备4兼容性测试标准4.1应用与OS版本兼容4.2应用升级兼容4.3应用交互兼容1范围1.1背景及目的软件的兼容性,一般是指某个软件能稳定地工作在若干个操作系统之上,而不会出现意外退出等问题。对应用而言,是指其能够稳定工作在其安装的不同OS版本上,且由于应用版本更新周期较为频繁,应用也需要保证在安装运行的OS版本不变的情况下,应用自身升级后可以稳定地工作。应用的兼容性主要有两个维度:应用运行交互的依赖发生变化:不同的OS版本、不同的设备类型、不同的交互应用;应用自身发生变化,而应用的运行

C++ "error: "对象在引用中丢失...”取决于 gcc 版本

我在使用一个gcc版本(4.3.2)时遇到编译错误,而使用较新版本的gcc可以毫无怨言地编译相同的代码,例如4.5.2.下面的例子说明了这个问题:classBase{protected:intmember;};templateclassA:publicBase{};templateclassC:publicA{C(){Base::member=1;}};intmain(){}对于4.3.2,我得到:test.cpp:Inconstructor'C::C()':test.cpp:4:error:objectmissinginreferenceto'Base::member'test.cp

ARM_Linux中GCC编译器的使用

目录前言:GCC编译过程:预处理:编译阶段:汇编:链接阶段GCC的常见使用前言:什么是GCC:gcc的全称是GNUCompilerCollection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNUCCompiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。特点:gcc是一个可移植的编译器,支持多种硬件平台。例如ARM、X86等等。gcc不仅是个本地编译器,它还能跨平台交叉编译。所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行。而gcc编译出来的程序能够在其他平台进行运行。例如嵌入式程序可在x86上编译,然后

c++ - 可以使用内联命名空间来保持共享库的向后兼容性吗?

C++内联命名空间的基本原理是源代码和二进制兼容性(请参阅HerbSutter的论文,链接在N2535中),但我无法找到保持现有二进制兼容性的好例子引入内联命名空间时的库,或者如果可能的话。(有关更多信息和源兼容性示例,请参阅thisquestion)(解决一个相关问题,使用inlinenamespace引入不兼容,参见thisquestion)如果这是我们当前的库(例如mylib.dll),它与客户共享并且需要稳定:structModelA{/*(...)lotsofstuff*/};structModelB{/*(...)lotsofstuff*/};我们能否在不破坏客户端的情况下

c++ - GCC 无法优化涉及成员函数指针的委托(delegate) lambda 函数

我使用GCC4.9.2和clang3.6.0编译了以下c++14代码。我使用了-O3标志。#includestructS{inta;intA()const{returna;}};templateintFunc(F&&f,Args&&...args){returnf(std::forward(args)...);}usingPtrA=int(S::*)()const;intF(Sconst&s,PtrAptr){return(s.*ptr)()*5;}intp(Sconst&s){returns.A()*5;}intP1(Sconst&s){returnFunc(&F,s,&S::A);

c++ - libstdc++ 不识别标准库文字

我正在尝试使用std::literals命名空间中的文字来编译一个简单的程序,但是当我尝试编译它时Clang会生成错误。我要编译的代码:#include#includeusingnamespacestd::literals;intmain(){std::cout和编译命令:clang++-stdlib=libstdc++-std=c++1ya.cpp这导致了这个输出:a.cpp:4:22:error:expectednamespacenameusingnamespacestd::literals;~~~~~^a.cpp:8:29:error:nomatchingliteralopera

c++ - 按引用和按值传递时的 gcc 程序集

我有一个简单的函数来计算两个双数组:#include#includestructS{double*x;double*y;double*z;};voidf(S&s,size_tn){for(inti=0;i请注意,函数f的第一个参数是通过引用传入的。让我们看看f()的结果汇编(我删除了一些不相关的件,插入评论并放置一些标签):$g++-O3-Sasmtest.cpp.globl_Z1fR1Sm_Z1fR1Sm:xorl%eax,%eaxtestq%rsi,%rsije.L1.L5:movq(%rdi),%r8#arrayx(1)movq8(%rdi),%rcx#arrayy(2)movq

uniapp+springboot医院智能导诊系统源码,自动兼容小程序与H5版本

目录一、技术架构二、系统结构三、技术原理四、智慧导诊系统应用场景1、智慧医院2、互联网医院3、医疗健康平台智能导诊系统可以精准高效地推荐挂号科室。根据患者症状描述推荐挂号科室,并可展示相应的医疗信息,针对具体医院业务场景可接入科室介绍,专家介绍,门诊安排,就诊需知,科室位置等,患者选择科室后可直接完成挂号。智能导诊系统可应用于微信线上挂号、互联网医院、区域平台等场景中,解决了患者因医学知识缺乏,院内咨询不便所导致的医患资源错配的痛点,还能无缝集成挂号与在线问诊等业务,节省各种资源,同时满足医院智慧服务评级的诉求。一、技术架构Uniapp+springboot+redis+mybatisplus

c++ - __attribute__ ((weak)) 的处理在 clang 和 gcc 中是不同的

我有一个应用程序(app)和一个动态库/共享对象(dlib),它们都链接到一个静态库,该静态库使用__declspec(selectany)在头文件中声明了一个全局变量(gvar)|/__attribute__((weak)).通过设计,app和dlib都应该有自己的gvar拷贝(在MSVC和GCC上我完全明白这一点)。移植到MacOSX并用clang编译后,我看到dlib中的gvar链接到应用程序中的gvar。不确定这是一个clang错误还是设计使然;如果是设计使然,是否有任何方法可以避免它并获得与GCC/MSVC中相同的行为?clang版本:bash-3.2$c++--versio